package QianFeng03;

/**
 * static关键字
 * 1、使用static关键字修饰一个属性：声明为static的变量实质上就是全局变量
 * 2、使用static关键字修饰一个方法：通常，在定义一个方法为static，那就是说，无需本类的对象即可调用此方法
 * 3、使用static关键字修饰一个类（内部类）
 * 4、静态变量是全局变量，生命周期从类被加载后一直到程序结束
 * 5、静态变量只有一份，在静态方法区中存储
 * 6、静态变量是本类所有对象共享一份
 * 7、建议不要使用对象名去调用静态数据，直接使用类名调用
 * 8、static修饰一个方法，那么该方法属于类，不属于对象，直接用类名调用
 * 9、静态方法不能访问非静态属性和方法，只能访问静态
 * 10、所有对象共同的属性或方法，那么我们应该定义为静态的
 */
public class Test7 {
    public static void main(String[] args) { //args 是一个字符串类型的数组
        System.out.println(args.length);//args.length 是个空数组，为 0
        for (String s : args) {
            System.out.println(s);//向s传递参数，可以在控制台中显示出来
        }
        //使用static前
        //Role beibei = new Role("刘备","蜀国");
        //Role yunchang = new Role("云长","蜀国");
        //Role feifei = new Role("张飞","蜀国");

        //使用static后
        Role beibei = new Role("刘备");//后面就不用加国家了
        Role yunchang = new Role("云长");//后面就不用加国家了
        Role feifei = new Role("张飞");//后面就不用加国家了

        System.out.println(beibei.getInfo());
        System.out.println(yunchang.getInfo());
        System.out.println(feifei.getInfo());

        System.out.println(beibei.country);
        System.out.println(yunchang.country);
        System.out.println(feifei.country);

        beibei.country = "秦国";
        System.out.println("------------------------");
        System.out.println(beibei.country);
        System.out.println(yunchang.country);
        System.out.println(feifei.country);//不建议用对象名调用静态变量

        System.out.println("------------------------");
        System.out.println(Role.country);//建议用类名调用静态变量
    }

}

//角色
class Role {
    private String name;
    static String country = "蜀国"; //静态变量（全局）

    //使用static前
	/*public Role(String name,String country) {
		this.name = name;
		this.country = country;  //用了static后country可以不用了
	}*/

    //使用static后，不用再定义country了
    public Role(String name) {
        this.name = name;
    }

    /*--------------------------------------------*/
    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    //静态方法不能访问静态的数据
    public static void setCountry(String country) {
        Role.country = country;
    }
	/*public void setCountry(String country) {
		this.country = country;
	}
	public String getCountry() {
		return country;
	}*/

    public String getInfo() {
        return "name=" + name + ",country=" + country;
    }
}


